#ifndef __QP_INTF_H__
#define __QP_INTF_H__

#include "Marcos.h"

/*---------------宏定义使用方法-----------------

调试模式 :启用 DEBUG_MODE 宏定义
#define DEBUG_MODE     
// #define DLL_MODE       
// #define MYLIB_EXPORTS   

动态DLL模式 （导出）：
// #define DEBUG_MODE   
#define DLL_MODE       
#define MYLIB_EXPORTS  

动态DLL模式 （导入）：
// #define DEBUG_MODE    
#define DLL_MODE        
// #define MYLIB_EXPORTS   

静态LIB模式：
// #define DEBUG_MODE     
// #define DLL_MODE        
// #define MYLIB_EXPORTS    

-----------------------------*/
#define DEBUG_MODE     //启用：Debug时，    注释：编译 静态|动态库 时
// #define DLL_MODE          //启用：DLL库 ，     注释： LIB库
// #define MYLIB_EXPORTS     //启用：导出用编译时，注释：导入编译时

#ifdef DEBUG_MODE
    #define MYLIB_API 
#else
    #ifdef DLL_MODE
        #ifdef MYLIB_EXPORTS
            #define MYLIB_API __declspec(dllexport)
        #else
            #define MYLIB_API __declspec(dllimport)
        #endif
    #else
        #define MYLIB_API 
    #endif
#endif

using callback_trigger = void (*)(int total, int index, int trigger_number,tpDNRouteStruct route);

using callback_motor_err = void (*)(uint16_t err_code1,uint16_t err_code2,uint16_t err_code3,uint16_t err_code4,uint16_t err_code5,uint16_t err_code6);

MYLIB_API int TP_DN_Init(void);  //接口初始化

// #define LOG_LVL_TRACE 0
// #define LOG_LVL_DEBUG 1
// #define LOG_LVL_INFO  2
// #define LOG_LVL_WARN  3
// #define LOG_LVL_ERROR 4
// #define LOG_LVL_CRTICLE 5
// #define LOG_LVL_OFF 6
MYLIB_API int TP_DN_SetDebugLog(int level); //设置系统日志

MYLIB_API int TP_DN_GetVersion(std::string & info);  //获取SDK版本信息

MYLIB_API bool TP_Is_Connected(void);  //是否有socket client接入

MYLIB_API bool TP_Is_AllDrv_Enable(void);  //是否驱动器已经全部使能

MYLIB_API int TP_DN_SetPosition(std::vector<tpDNRouteStruct> const & pos_routes, int pos_interval); //设置设备位置（指定位置、路径且让探头移动到该位置）

MYLIB_API int TP_DN_SetRoutes(std::vector<tpDNRouteStruct> const & routes, int interval); // 设置路径点

MYLIB_API int TP_DN_StartRoutes(int trigger_delay); //启动路径

MYLIB_API int TP_DN_PauseRoutes(void);  //暂停路径执行

MYLIB_API int TP_DN_ResumeRoutes(void);  //继续路径执行

MYLIB_API int TP_DN_StopRoutes(void);  //停止路径执行

MYLIB_API bool TP_DN_DO_Ccontrol(uint8_t id,uint8_t on_off);  //DO 输出控制

MYLIB_API bool TP_DN_Routes_Finish(void);  //是否点位路径运行结束

MYLIB_API int TP_DN_SetDefaultSpeed(int axis, float v);  //设置默认的速度

MYLIB_API int TP_DN_Refresh_Rt_Infos(); //刷新一次设备实时信息 （没有任何反馈，只是刷新一次内部变量的值，将位置，速度等刷新到最新的实时值）

MYLIB_API int TP_DN_GetDefaultSpeed(int axis, float & v); //获取电机的默认速度

MYLIB_API int TP_DN_GetPosition(tpDNPositionStruct & pos); //获取设备位置信息

MYLIB_API int TP_DN_GetCurrentRoute(int & index, tpDNRouteStruct & route);  //获取开始执行路径规划后，当前的路径信息

MYLIB_API int TP_DN_SingleMove(int axis,float distance,float speed);   //单独控制各个轴的移动

MYLIB_API int TP_DN_SetOrigin(int index, tpDNOriginEncoderStruct & encoder); //设置坐标原点

MYLIB_API int TP_DN_LoadOrigin(void); //加载原点坐标

MYLIB_API int TP_DN_GetOriginEncoder(tpDNOriginEncoderStruct & encoder);  //获取坐标原点的编码器值

MYLIB_API void TP_DN_SetCallBack(callback_trigger func);

MYLIB_API void TP_DN_SetCallBack_MotorErr(callback_motor_err func);

// MYLIB_API int TP_DN_BackTo_Origin(tpDNPositionStruct & cur_pos);  //回到原点接口



//---虚拟点位发送---
MYLIB_API int DBG_Virtual_Pts_Set_Forward_WaitFin(tpDNPositionStruct & cur_pos) ;  //用到了 TP_DN_SetPosition接口

MYLIB_API int DBG_Virtual_Pts_Set_Forword(tpDNPositionStruct & cur_pos);  //到了 TP_DN_SetRoutes 接口 和TP_DN_StartRoutes 接口
//---虚拟点位发送---
MYLIB_API int DBG_Virtual_Pts_Set_Backword(tpDNPositionStruct & cur_pos) ;  //用到了 TP_DN_SetRoutes 接口 和TP_DN_StartRoutes 接口




#endif



